package com.aiphome.benchmark;

import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

/**
 * 基准测试执行器，用于启动和配置JMH基准测试
 * 可以通过主类直接运行，也可以在Spring Boot应用程序启动后调用
 */
public class BenchmarkRunner {

    public static void main(String[] args) throws RunnerException {
        runBenchmarks();
    }

    /**
     * 配置并运行所有基准测试
     */
    public static void runBenchmarks() throws RunnerException {
        // 配置JMH选项
        Options options = new OptionsBuilder()
                .include("JwtPerformanceBenchmark") // 只运行JWT性能基准测试
                .forks(2)                         // 运行2个独立进程
                .warmupIterations(3)              // 3次预热迭代
                .measurementIterations(5)         // 5次测量迭代
                .threads(4)                       // 使用4个线程
                .syncIterations(true)             // 同步迭代
                .shouldFailOnError(true)          // 遇到错误时失败
                .shouldDoGC(true)                 // 在测量前执行GC
                .build();

        // 运行基准测试
        new Runner(options).run();
    }

    /**
     * 运行特定的基准测试方法
     * 
     * @param methodName 要运行的方法名
     */
    public static void runSpecificBenchmark(String methodName) throws RunnerException {
        Options options = new OptionsBuilder()
                .include(".*" + methodName + ".*")
                .forks(1)
                .warmupIterations(2)
                .measurementIterations(3)
                .build();

        new Runner(options).run();
    }
}